package com.okex.open.api.bean.other;

import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.List;

/**
 * WS / 订单频道 推送数据
 */
@NoArgsConstructor
@Data
public class WSOrderTradeChannel {


    @JsonProperty("arg")
    private ArgDTO arg;
    @JsonProperty("data")
    private List<DataDTO> data;

    @NoArgsConstructor
    @Data
    public static class ArgDTO {
        @JsonProperty("channel")
        private String channel;
        @JsonProperty("instType")
        private String instType;
        @JsonProperty("instId")
        private String instId;
        @JsonProperty("uid")
        private String uid;
    }

    @NoArgsConstructor
    @Data
    public static class DataDTO {
        @JsonProperty("accFillSz")
        private Double accFillSz;  // 累计成交数量
        @JsonProperty("amendResult")
        private String amendResult;  // 修改结果
        @JsonProperty("avgPx")
        private Double avgPx;  // 平均价格
        @JsonProperty("cTime")
        private String cTime;  // 创建时间
        @JsonProperty("category")
        private String category;  // 分类
        @JsonProperty("ccy")
        private String ccy;  // 货币
        @JsonProperty("clOrdId")
        private String clOrdId;  // 客户订单ID
        @JsonProperty("code")
        private String code;  // 代码
        @JsonProperty("execType")
        private String execType;  // 执行类型
        @JsonProperty("fee")
        private Double fee;  // 费用
        @JsonProperty("feeCcy")
        private String feeCcy;  // 费用货币
        @JsonProperty("fillFee")
        private Double fillFee;  // 成交费用
        @JsonProperty("fillFeeCcy")
        private String fillFeeCcy;  // 成交费用货币
        @JsonProperty("fillNotionalUsd")
        private String fillNotionalUsd;  // 成交名义金额（美元）
        @JsonProperty("fillPx")
        private String fillPx;  // 成交价格
        @JsonProperty("fillSz")
        private Double fillSz;  // 成交数量
        @JsonProperty("fillPnl")
        private Double fillPnl;  // 成交盈亏
        @JsonProperty("fillTime")
        private String fillTime;  // 成交时间
        @JsonProperty("fillPxVol")
        private String fillPxVol;  // 成交价格波动
        @JsonProperty("fillPxUsd")
        private String fillPxUsd;  // 成交价格（美元）
        @JsonProperty("fillMarkVol")
        private String fillMarkVol;  // 成交标记波动
        @JsonProperty("fillFwdPx")
        private String fillFwdPx;  // 成交远期价格
        @JsonProperty("fillMarkPx")
        private String fillMarkPx;  // 成交标记价格
        @JsonProperty("instId")
        private String instId;  // 仪器ID
        @JsonProperty("instType")
        private String instType;  // 仪器类型
        @JsonProperty("lever")
        private String lever;  // 杠杆
        @JsonProperty("msg")
        private String msg;  // 消息
        @JsonProperty("notionalUsd")
        private Double notionalUsd;  // 名义金额（美元）
        @JsonProperty("ordId")
        private String ordId;  // 订单ID
        @JsonProperty("ordType")
        private String ordType;  // 订单类型
        @JsonProperty("pnl")
        private Double pnl;  // 盈亏
        @JsonProperty("posSide")
        private String posSide;  // 持仓方向
        @JsonProperty("px")
        private Double px;  // 价格
        @JsonProperty("pxUsd")
        private String pxUsd;  // 价格（美元）
        @JsonProperty("pxVol")
        private String pxVol;  // 价格波动
        @JsonProperty("pxType")
        private String pxType;  // 价格类型
        @JsonProperty("rebate")
        private String rebate;  // 回扣
        @JsonProperty("rebateCcy")
        private String rebateCcy;  // 回扣货币
        @JsonProperty("reduceOnly")
        private boolean reduceOnly;  // 仅减少
        @JsonProperty("reqId")
        private String reqId;  // 请求ID
        @JsonProperty("side")
        private String side;  // 交易方向
        @JsonProperty("attachAlgoClOrdId")
        private String attachAlgoClOrdId;  // 附加算法客户订单ID
        @JsonProperty("slOrdPx")
        private String slOrdPx;  // 止损订单价格
        @JsonProperty("slTriggerPx")
        private String slTriggerPx;  // 止损触发价格
        @JsonProperty("slTriggerPxType")
        private String slTriggerPxType;  // 止损触发价格类型
        @JsonProperty("source")
        private String source;  // 来源

        /**
         * 订单状态
         * canceled：撤单成功
         * live：等待成交
         * partially_filled：部分成交
         * filled：完全成交
         * mmp_canceled：做市商保护机制导致的自动撤单
         */
        @JsonProperty("state")
        private String state;  // 订单状态

        @JsonProperty("stpId")
        private String stpId;  // STP ID
        @JsonProperty("stpMode")
        private String stpMode;  // STP 模式
        @JsonProperty("sz")
        private Double sz;  // 大小
        @JsonProperty("tag")
        private String tag;  // 标签
        @JsonProperty("tdMode")
        private String tdMode;  // TD 模式
        @JsonProperty("tgtCcy")
        private String tgtCcy;  // 目标货币
        @JsonProperty("tpOrdPx")
        private String tpOrdPx;  // 止盈订单价格
        @JsonProperty("tpTriggerPx")
        private String tpTriggerPx;  // 止盈触发价格
        @JsonProperty("tpTriggerPxType")
        private String tpTriggerPxType;  // 止盈触发价格类型
        @JsonProperty("tradeId")
        private String tradeId;  // 交易ID
        @JsonProperty("lastPx")
        private Double lastPx;  // 最后价格
        @JsonProperty("quickMgnType")
        private String quickMgnType;  // 快速保证金类型
        @JsonProperty("algoClOrdId")
        private String algoClOrdId;  // 算法客户订单ID
        @JsonProperty("attachAlgoOrds")
        private List<?> attachAlgoOrds;  // 附加算法订单
        @JsonProperty("algoId")
        private String algoId;  // 算法ID
        @JsonProperty("amendSource")
        private String amendSource;  // 修改来源
        @JsonProperty("cancelSource")
        private String cancelSource;  // 取消来源
        @JsonProperty("isTpLimit")
        private String isTpLimit;  // 是否为止盈限制
        @JsonProperty("uTime")
        private long uTime;  // 更新时间
    }
}
